/* 
 * File:   Utilidad.h
 * Author: 75.02 - Grupo 7, 2do cuatrimestre 2012.
 *
 * Created on 31 de octubre de 2012, 18:47
 */

#ifndef UTILIDAD_H
#define	UTILIDAD_H

#include <string>
#include "Posicion.h"
#include "Rol.h"
#include "ISerializable.h"
#include "IColisionado.h"

using namespace std;
using namespace TP::Serializacion;
using namespace TP::Juego::Arena;
using namespace TP::Juego::Motorizacion::Fisica;
using namespace TP::Juego::Motorizacion::Colisiones;

namespace TP { namespace Juego { namespace Arena { namespace Utilidades {

class Utilidad : public IColisionado, public ISerializable {
public:

    Utilidad(const string& pNombre, Rol* pRol);

    virtual ~Utilidad();
    
    string& getNombre ();
    
    Posicion* setPosicion (Posicion* pPosicion);
    
    Posicion* getPosicion ();
    
    Rol* getRol();
    
    virtual string aXML() = 0;
    
    virtual string aXML(const string& pPath) = 0;
    
    virtual void parseXML (const string& pDescriptor) = 0;
    
    virtual TiXmlElement* aElementoXML () = 0;
    
    virtual void deElementoXML (TiXmlElement* pElemento) = 0;   
    
    static Utilidad* deElementoXMLGenerico (TiXmlElement* pElemento);
    
    virtual double decrementarEnergia (double pCantidadEnergia);

protected:
    string setNombre(const string& pNombre);
    
private:
    string _nombre;
    Posicion* _posicion;
    Rol* _rol;
    double _vida;
};
    
}}}}

#endif	/* UTILIDAD_H */

